home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / gtlayout-source.lha / LTP_FracEditRoutine.c < prev    next >
C/C++ Source or Header  |  1995-09-24  |  2KB  |  98 lines

  1. /*  GadTools layout toolkit
  2. **
  3. **  Copyright © 1993-1995 by Olaf `Olsen' Barthel
  4. **  Freely distributable.
  5. */
  6.  
  7. #include "gtlayout_global.h"
  8.  
  9. #ifdef DO_FRACTION_KIND
  10. ULONG __asm __saveds
  11. LTP_FracEditRoutine(register __a0 struct Hook *Hook,register __a2 struct SGWork *Work,register __a1 ULONG *Msg)
  12. {
  13.     if(*Msg == SGH_KEY)
  14.     {
  15.         if(Work -> IEvent -> ie_Code == 0x5F)
  16.         {
  17.             LayoutHandle *Handle = Hook -> h_Data;
  18.  
  19.             if(Handle -> HelpHook)
  20.             {
  21.                 Work -> Code    = 0x5F;
  22.                 Work -> Actions    = (Work -> Actions & ~SGA_BEEP) | SGA_END | SGA_USE;
  23.  
  24.                 LTP_AddHistory(Work);
  25.  
  26.                 return(TRUE);
  27.             }
  28.         }
  29.  
  30.         if(Work -> IEvent -> ie_Code == CURSORUP || Work -> IEvent -> ie_Code == CURSORDOWN)
  31.             LTP_HandleHistory(Work);
  32.  
  33.         if(Work -> EditOp == EO_ENTER)
  34.         {
  35.             LayoutHandle    *Handle = Hook -> h_Data;
  36.             ObjectNode    *Node;
  37.             BOOLEAN      Activate = TRUE;
  38.  
  39.             if(GETOBJECT(Work -> Gadget,Node))
  40.             {
  41.                 if(Node -> Type == FRACTION_KIND && Node -> Special . String . LastGadget)
  42.                     Activate = FALSE;
  43.             }
  44.  
  45.             if(!(Work -> IEvent -> ie_Qualifier & QUALIFIER_SHIFT))
  46.             {
  47.                 if(Activate && Handle -> AutoActivate)
  48.                     Work -> Actions |= SGA_NEXTACTIVE;
  49.  
  50.                 if(!(Work -> Actions & SGA_NEXTACTIVE))
  51.                     Work -> Code = '\r';
  52.             }
  53.         }
  54.  
  55.         if(Work -> EditOp == EO_INSERTCHAR || Work -> EditOp == EO_REPLACECHAR)
  56.         {
  57.             UBYTE DecimalPoint = (LTP_Locale ? LTP_Locale -> loc_DecimalPoint[0] : '.');
  58.  
  59.             if(Work -> Code == DecimalPoint || (Work -> Code >= '0' && Work -> Code <= '9'))
  60.             {
  61.                 if(Work -> Code == DecimalPoint)
  62.                 {
  63.                     BOOLEAN UseIt = TRUE;
  64.                     LONG    i;
  65.  
  66.                     for (i = 0 ; UseIt && i < Work -> NumChars ; i++)
  67.                     {
  68.                         if(Work -> PrevBuffer[i] == DecimalPoint)
  69.                             UseIt = FALSE;
  70.                     }
  71.  
  72.                     if(!UseIt)
  73.                     {
  74.                         Work -> Actions &= ~SGA_USE;
  75.                         Work -> Actions |=  SGA_BEEP;
  76.                     }
  77.                 }
  78.             }
  79.             else
  80.             {
  81.                 Work -> Actions &= ~SGA_USE;
  82.                 Work -> Actions |=  SGA_BEEP;
  83.             }
  84.         }
  85.  
  86.         if(Work -> Actions & SGA_END)
  87.             LTP_AddHistory(Work);
  88.     }
  89.     else
  90.     {
  91.         if(*Msg != SGH_CLICK)
  92.             return(FALSE);
  93.     }
  94.  
  95.     return(TRUE);
  96. }
  97. #endif
  98.